/*
 * Assembler.h
 *
 *  Created on: 7 Sep 2011
 *      Author: Allan
 */

#ifndef ASSEMBLER_H_
#define ASSEMBLER_H_

// C++ includes
#include <string>
#include <vector>
using namespace std;

// GeoReact forward declarations
class Phase;
class Multiphase;
class Reaction;
class ReactionSystem;
class System;
class AqueousActivity;
class GaseousActivity;
class MineralActivity;

const System
AssembleSystem(const vector<string>& species);

const System
AssembleSystem(const vector<string>& species, const vector<string>& kineticSpecies);

const Multiphase
AssembleMultiphase(const vector<string>& species);

const Phase
AssembleAqueousPhase(const vector<string>& species);

const Phase
AssembleAqueousPhase(const vector<string>& species, const AqueousActivity& activity);

const Phase
AssembleGaseousPhase(const vector<string>& species);

const Phase
AssembleGaseousPhase(const vector<string>& species, const GaseousActivity& activity);

const Phase
AssembleMineralPhase(const vector<string>& species);

const Phase
AssembleMineralPhase(const vector<string>& species, const MineralActivity& activity);

const ReactionSystem
AssembleReactionSystem(const vector<string>& reactants, const Multiphase& multiphase);

const Reaction
AssembleReaction(const string& reactant, const Multiphase& multiphase);

const Reaction
AssemblePlainReaction(const string& reactant, const Multiphase& multiphase);

const Reaction
AssembleBasisReaction(const string& reactant, const Multiphase& multiphase);

const Reaction
AssembleMineralReaction(const string& reactant, const Multiphase& multiphase);

const vector<string>
AssembleSpecies(const vector<string>& species);

const vector<string>
AssembleAqueousSpecies(const vector<string>& species);

const vector<string>
AssembleGaseousSpecies(const vector<string>& species);

const vector<string>
AssembleMineralSpecies(const vector<string>& species);

const vector<string> 
AssemblePrimarySpecies(const vector<string>& species);

const vector<string> 
AssembleSecondarySpecies(const vector<string>& species);

#endif /* ASSEMBLER_H_ */
